﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using DTTB.MV2.QUANLYNHANSUTIENLUONG.BussinessDelegate.ChamCongDelegate;
using DTTB.MV2.QUANLYNHANSUTIENLUONG.BussinessDelegate.CommonDelegate;
using DTTB.MV2.QUANLYNHANSUTIENLUONG.Controllers.Base;
using DTTB.MV2.QUANLYNHANSUTIENLUONG.Models.FormBean.ChamCongModel;
using DTTB.MV2.QUANLYNHANSUTIENLUONG.Models.LinQ.ChamCong;
using DTTB.MV2.QUANLYNHANSUTIENLUONG.Models.LinQ.DanhMuc;
using DTTB.MV2.QUANLYNHANSUTIENLUONG.BussinessDelegate.DanhMucDelegate;

namespace DTTB.MV2.QUANLYNHANSUTIENLUONG.Controllers
{
    public class ChamCongController:BaseController
    {
        #region Private Member

        CommonDelegate _commonDelegate = new CommonDelegate();
        ChamCongServiceDelegate _chamCongServiceDelegate = new ChamCongServiceDelegate();
        ThoiKhoaBieuChamCongDelegate _ThoiKhoaBieuChamCongDelegate = new ThoiKhoaBieuChamCongDelegate();
        TienBoiDuongDelegate TienBoiDuongDelegate = new TienBoiDuongDelegate();
        SoKmDelegate SoKmDelegate = new SoKmDelegate();
        BuoiDelegate BuoiDelegate = new BuoiDelegate();
        LoaiXeDelegate _LoaiXeDelegate = new LoaiXeDelegate();
        SoLuongTaiXeDelegate _SoLuongTaiXeDelegate = new SoLuongTaiXeDelegate();
        #endregion

        #region BACNP

        public ActionResult ChamCongHomNayCopy()
        {
            return View();
        }

        [HttpGet]
        public ActionResult ChamCongHomNay(int? id, int? ngay, int? thang, int? nam, int? idPhongBan, int? idChucVu, string hoTen, int? pageIndex)
        {
            var form = new ChamCongHomNayForm();
            form.PageIndex = pageIndex > 1 ? pageIndex.Value : 1;
            form.SearchByIdPhongBan = idPhongBan;
            form.SearchByIdChucVu = idChucVu;
            form.SearchByHoTen = !string.IsNullOrEmpty(hoTen) ? hoTen.Trim() : string.Empty;
            var dtToday = DateTime.Today;

            CC_BangChamCong objBangChamCong = null;

            #region Chấm Công Cho Hôm Nay (Ngày Hiện Tại)
            if (id == null && ngay == null && thang == null && nam == null)
            {
                //Chấm Công Cho Hôm Nay (Ngày Hiện Tại)
                objBangChamCong = _chamCongServiceDelegate.GetBangChamCongByNgayChamCong(dtToday);
                if (objBangChamCong == null)
                {
                    form.MessageError =
                        string.Format(
                            "Bảng Chấm Công tháng {0}/{1} chưa được tạo! Vui lòng <a href='/ChamCong/SuaBangChamCong' target='_blank'>Tạo Bảng Chấm Công</a> nếu muốn Chấm Công cho ngày '{2} <i>({3} - Hôm nay)</i>'!",
                            dtToday.Month.ToString("0#"), dtToday.Year,
                            dtToday.ToString("dd/MM/yyyy"), _commonDelegate.GetDayOfWeek(dtToday));
                }
                else
                {
                    form.NgayChamCong = dtToday;
                    form.Ngay = dtToday.Day;
                    form.IsToday = true;
                    form.DayOfWeek = _commonDelegate.GetDayOfWeek(dtToday);
                }
            }
            #endregion
            #region Chấm Công Cho Ngày 'ngay/thang/nam'
            if (id == null && ngay != null && thang != null && nam != null)
            {
                //Chấm Công Cho Ngày 'ngay/thang/nam'
                if (!_commonDelegate.IsDateTime(ngay, thang, nam))
                {
                    form.MessageError =
                        string.Format(
                            "Không tồn tại ngày '{0}/{1}/{2}'! Vui lòng chọn ngày khác!",
                            Convert.ToString(ngay), Convert.ToString(thang), Convert.ToString(nam));
                }
                else
                {
                    form.NgayChamCong = _commonDelegate.ConvertToDateTime(ngay, thang, nam);
                    form.Ngay = form.NgayChamCong.Value.Day;
                    form.DayOfWeek = _commonDelegate.GetDayOfWeek(form.NgayChamCong);
                    if (_commonDelegate.DateTimeIsEqual(form.NgayChamCong, dtToday))
                    {
                        //return Redirect("/ChamCong/ChamCongHomNay");
                        return RedirectToAction("ChamCongHomNay",
                            new
                            {
                                idPhongBan = form.SearchByIdPhongBan,
                                idChucVu = form.SearchByIdChucVu,
                                hoTen = form.SearchByHoTen,
                                pageIndex = form.PageIndex
                            });
                    }
                    objBangChamCong = _chamCongServiceDelegate.GetBangChamCongByNgayChamCong(form.NgayChamCong);
                    if (objBangChamCong == null)
                    {
                        form.MessageError =
                            string.Format(
                                "Bảng Chấm Công tháng {0}/{1} chưa được tạo! Vui lòng <a href='/ChamCong/SuaBangChamCong' target='_blank'>Tạo Bảng Chấm Công</a> nếu muốn Chấm Công cho ngày '{2} <i>({3})</i>'!",
                                form.NgayChamCong.Value.Month.ToString("0#"), form.NgayChamCong.Value.Year,
                                form.NgayChamCong.Value.ToString("dd/MM/yyyy"),
                                _commonDelegate.GetDayOfWeek(form.NgayChamCong));
                    }
                }
            }
            #endregion
            #region Chấm Công Cho Ngày 'ngay' Của Bảng Chấm Công có Mã Bảng Chấm Công = 'id'
            if (id != null && ngay != null && thang == null && nam == null)
            {
                //Chấm Công Cho Ngày 'ngay' Của Bảng Chấm Công có Mã Bảng Chấm Công = 'id'
                objBangChamCong = _chamCongServiceDelegate.GetBangChamCongByIdBangChamCong(id);
                if (objBangChamCong == null)
                {
                    form.MessageError =
                        "Dữ liệu Chấm Công Không Tồn Tại! Vui lòng chọn một ngày khác hay một bảng chấm công khác!";
                }
                else
                {
                    if (!_commonDelegate.IsDateTime(ngay, objBangChamCong.Thang,objBangChamCong.Nam))
                    {
                        form.MessageError =
                            string.Format(
                                "Không tồn tại ngày '{0}/{1}/{2}'! Vui lòng chọn ngày khác!",
                                Convert.ToString(ngay), Convert.ToString(objBangChamCong.Thang), Convert.ToString(objBangChamCong.Nam));
                    }
                    else
                    {
                        form.NgayChamCong = _commonDelegate.ConvertToDateTime(ngay, objBangChamCong.Thang,
                                                                              objBangChamCong.Nam);
                        form.Ngay = form.NgayChamCong.Value.Day;
                        form.DayOfWeek = _commonDelegate.GetDayOfWeek(form.NgayChamCong);
                        if (_commonDelegate.DateTimeIsEqual(form.NgayChamCong, dtToday))
                        {
                            //return Redirect("/ChamCong/ChamCongHomNay");
                            return RedirectToAction("ChamCongHomNay",
                                new
                                {
                                    idPhongBan = form.SearchByIdPhongBan,
                                    idChucVu = form.SearchByIdChucVu,
                                    hoTen = form.SearchByHoTen,
                                    pageIndex = form.PageIndex
                                });
                        }
                    }
                }
            }
            #endregion
            #region Chấm Công Cho Ngày 'ngay' Của Bảng Chấm Công Tháng Hiện Tại
            if (id == null && ngay != null && thang == null && nam == null)
            {
                //Chấm Công Cho Ngày 'ngay' Của Bảng Chấm Công Tháng Hiện Tại

                if (ngay == dtToday.Day)
                {
                    //return Redirect("/ChamCong/ChamCongHomNay");
                    return RedirectToAction("ChamCongHomNay",
                        new
                        {
                            idPhongBan = form.SearchByIdPhongBan,
                            idChucVu = form.SearchByIdChucVu,
                            hoTen = form.SearchByHoTen,
                            pageIndex = form.PageIndex
                        });
                }
                objBangChamCong = _chamCongServiceDelegate.GetBangChamCongByNgayChamCong(dtToday);
                if (!_commonDelegate.IsDateTime(ngay, dtToday.Month, dtToday.Year))
                {
                    form.MessageError =
                        string.Format(
                            "Không tồn tại ngày '{0}/{1}/{2}'! Vui lòng chọn ngày khác!",
                            Convert.ToString(ngay), Convert.ToString(dtToday.Month), Convert.ToString(dtToday.Year));
                }
                else
                {
                    form.NgayChamCong = _commonDelegate.ConvertToDateTime(ngay, dtToday.Month, dtToday.Year);
                    form.Ngay = form.NgayChamCong.Value.Day;
                    form.DayOfWeek = _commonDelegate.GetDayOfWeek(form.NgayChamCong);
                    if (objBangChamCong == null)
                    {
                        form.MessageError =
                            string.Format(
                                "Bảng Chấm Công tháng {0}/{1} chưa được tạo! Vui lòng <a href='/ChamCong/SuaBangChamCong' target='_blank'>Tạo Bảng Chấm Công</a> nếu muốn Chấm Công cho ngày '{2} <i>({3})</i>'!",
                                form.NgayChamCong.Value.Month.ToString("0#"), form.NgayChamCong.Value.Year,
                                form.NgayChamCong.Value.ToString("dd/MM/yyyy"),
                                form.DayOfWeek);
                    }
                }
            }
            #endregion
            #region Chấm Công Cho Ngày 1 Của Bảng Chấm Công có Mã Bảng Chấm Công = 'id'
            if (id != null && ngay == null && thang == null && nam == null)
            {
                //Chấm Công Cho Ngày 1 Của Bảng Chấm Công có Mã Bảng Chấm Công = 'id'
                objBangChamCong = _chamCongServiceDelegate.GetBangChamCongByIdBangChamCong(id);
                if (objBangChamCong != null)
                {
                    //return RedirectToAction("ChamCongHomNay", new {id, ngay = 1});
                    return RedirectToAction("ChamCongHomNay",
                        new
                        {
                            id,
                            ngay = 1,
                            idPhongBan = form.SearchByIdPhongBan,
                            idChucVu = form.SearchByIdChucVu,
                            hoTen = form.SearchByHoTen,
                            pageIndex = form.PageIndex
                        });
                }
                form.MessageError =
                    "Dữ liệu Chấm Công Không Tồn Tại! Vui lòng chọn một ngày khác hay một bảng chấm công khác!";
            }
            #endregion

            if (objBangChamCong != null)
            {
                form.Id = objBangChamCong.ID;
                form.Thang = objBangChamCong.Thang;
                form.Nam = objBangChamCong.Nam;
                form.IsLock = objBangChamCong.IsLock;
                form.IsFinish = objBangChamCong.IsFinish;
                if (form.IsFinish)
                {
                    form.MessageError =
                        string.Format(
                            "Bảng Chấm Công tháng {0}/{1} đã hoàn thành! Không thể thao tác đối với dữ liệu Chấm Công của tháng '{2}/{3}'!",
                            form.NgayChamCong.Value.Month.ToString("0#"), dtToday.Year,
                            form.NgayChamCong.Value.Month.ToString("0#"), dtToday.Year);
                }
                if (form.IsLock)
                {
                    form.MessageError =
                        string.Format(
                            "Bảng Chấm Công tháng {0}/{1} đã bị khóa! Không thể thao tác đối với dữ liệu Chấm Công của tháng '{2}/{3}'! Hãy <a href='/ChamCong/SuaBangChamCong/{4}' target='_blank' title='Bảng chấm công tháng {5}/{6}'>mở khóa Bảng Chấm Công này</a> nếu muốn chấm công cho ngày {7}",
                            form.NgayChamCong.Value.Month.ToString("0#"), form.NgayChamCong.Value.Year,
                            form.NgayChamCong.Value.Month.ToString("0#"), form.NgayChamCong.Value.Year,
                            form.Id,
                            form.NgayChamCong.Value.Month.ToString("0#"), form.NgayChamCong.Value.Year,
                            form.NgayChamCong.Value.ToString("dd/MM/yyyy") + "<i>(" +
                            _commonDelegate.GetDayOfWeek(form.NgayChamCong) + ")</i>");
                }
                _chamCongServiceDelegate.BuildDanhSachNhanVienTrongChamCongNgay(form);
            }
            form.ListKyHieuChamCong = _chamCongServiceDelegate.BuildListAllKyHieuChamCong();

            return View(form);
        }

        [HttpPost]
        public ActionResult ChamCongHomNay(ChamCongHomNayForm formPosted)
        {
            //Thực hiện lưu thông tin Chấm Công Ngày và trả về result thành công hay thất bại
            var result = _chamCongServiceDelegate.LuuChamCongNhanVien(formPosted);

            _chamCongServiceDelegate.BuildDanhSachNhanVienTrongChamCongNgay(formPosted);
            formPosted.ListKyHieuChamCong = _chamCongServiceDelegate.BuildListAllKyHieuChamCong();
            return View(formPosted);
        }

        public ActionResult BangChamCong(int? id)
        {
            var form = new BangChamCongForm();

            form.Nam = id != null ? id.Value : DateTime.Today.Year;
            form.SelectListNam = _chamCongServiceDelegate.BuildSelectListNamTrongBangChamCong();
            if (!form.SelectListNam.Any())
            {
                form.SelectListNam = new SelectList(new List<object> {new {Value = form.Nam, Text = form.Nam}}, "Value",
                                                    "Text");
            }
            form.ListBangChamCong = _chamCongServiceDelegate.BuildListBangChamCongForm(form.Nam);

            return View(form);
        }

        [HttpGet]
        public ActionResult SuaBangChamCong(int? id)
        {
            var form = new BangChamCongForm();
            form.Id = id ?? 0;
            if (id > 0)
            {
                form = _chamCongServiceDelegate.BuildBangChamCongFormByIdBangChamCong(id ?? 0);
            }

            form.SelectListNam = _chamCongServiceDelegate.BuildSelectListNamDeTaoBangChamCong();
            form.SelectListThang = _chamCongServiceDelegate.BuildSelectListThangChuaCoBangChamCongTrongNamDeTaoBangChamCong(form.Nam);
            return View(form);
        }

        [HttpPost]
        public ActionResult SuaBangChamCong(BangChamCongForm formPosted)
        {
            //Thực hiện cập nhật thông tin Bảng Chấm Công và trả về result thành công hay thất bại
            var result = _chamCongServiceDelegate.CapNhatBangChamCong(formPosted);

            formPosted.SelectListNam = _chamCongServiceDelegate.BuildSelectListNamDeTaoBangChamCong();
            formPosted.SelectListThang =
                _chamCongServiceDelegate.BuildSelectListThangChuaCoBangChamCongTrongNamDeTaoBangChamCong(formPosted.Nam);
            return View("~/Views/ChamCong/SuaBangChamCong.aspx", formPosted);
        }

        [HttpPost]
        public ActionResult ThemMoiBangChamCong(BangChamCongForm formPosted)
        {
            //Thực hiện thêm mới Bảng Chấm Công và trả về result thành công hay thất bại
            var result = _chamCongServiceDelegate.ThemMoiBangChamCong(formPosted);

            formPosted.SelectListNam = _chamCongServiceDelegate.BuildSelectListNamDeTaoBangChamCong();
            formPosted.SelectListThang =
                _chamCongServiceDelegate.BuildSelectListThangChuaCoBangChamCongTrongNamDeTaoBangChamCong(formPosted.Nam);
            return View("~/Views/ChamCong/SuaBangChamCong.aspx", formPosted);
        }

        [HttpGet]
        public ActionResult ThemMoiBangChamCong()
        {
            return RedirectToAction("SuaBangChamCong");
        }

        /// <summary>
        /// Lấy danh sách tháng chưa có bảng chấm công trong năm
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public JsonResult GetThangChuaCoBangChamCongByNam(int id)
        {
            var listNamChuaCoBangChamCong = _chamCongServiceDelegate.GetThangChuaCoBangChamCongTrongNam(id);
            return Json(listNamChuaCoBangChamCong, JsonRequestBehavior.AllowGet);
        }

        [HttpPost]
        public ActionResult KhoaBangChamCong(BangChamCongForm formPosted)
        {
            //Thực hiện Khóa Bảng Chấm Công và trả về result thành công hay thất bại
            var result = _chamCongServiceDelegate.KhoaBangChamCong(formPosted);

            formPosted.SelectListNam = _chamCongServiceDelegate.BuildSelectListNamDeTaoBangChamCong();
            formPosted.SelectListThang =
                _chamCongServiceDelegate.BuildSelectListThangChuaCoBangChamCongTrongNamDeTaoBangChamCong(formPosted.Nam);
            return View("~/Views/ChamCong/SuaBangChamCong.aspx", formPosted);
        }

        [HttpGet]
        public ActionResult KhoaBangChamCong(int? id)
        {
            return RedirectToAction("SuaBangChamCong", new {id});
        }

        [HttpPost]
        public ActionResult MoKhoaBangChamCong(BangChamCongForm formPosted)
        {
            //Thực hiện Mở Khóa Bảng Chấm Công và trả về result thành công hay thất bại
            var result = _chamCongServiceDelegate.MoKhoaBangChamCong(formPosted);

            formPosted.SelectListNam = _chamCongServiceDelegate.BuildSelectListNamDeTaoBangChamCong();
            formPosted.SelectListThang =
                _chamCongServiceDelegate.BuildSelectListThangChuaCoBangChamCongTrongNamDeTaoBangChamCong(formPosted.Nam);
            return View("~/Views/ChamCong/SuaBangChamCong.aspx", formPosted);
        }

        [HttpGet]
        public ActionResult MoKhoaBangChamCong(int? id)
        {
            return RedirectToAction("SuaBangChamCong", new { id });
        }

        [HttpPost]
        public ActionResult HoanThanhBangChamCong(BangChamCongForm formPosted)
        {
            //Thực hiện Hoàn Thành Bảng Chấm Công và trả về result thành công hay thất bại
            var result = _chamCongServiceDelegate.HoanThanhBangChamCong(formPosted);

            formPosted.SelectListNam = _chamCongServiceDelegate.BuildSelectListNamDeTaoBangChamCong();
            formPosted.SelectListThang =
                _chamCongServiceDelegate.BuildSelectListThangChuaCoBangChamCongTrongNamDeTaoBangChamCong(formPosted.Nam);
            return View("~/Views/ChamCong/SuaBangChamCong.aspx", formPosted);
        }

        [HttpGet]
        public ActionResult HoanThanhBangChamCong(int? id)
        {
            return RedirectToAction("SuaBangChamCong", new { id });
        }

        [HttpGet]
        public ActionResult NhanVienTrongBangChamCong(int id, int? pageIndex, string TieuChiMot, string GiaTriMot)
        {
            var form = new NhanVienTrongBangChamCongForm();

            form.Id = id;
            form.PageIndex = pageIndex ?? 1;
            form.TieuChiMot = !string.IsNullOrEmpty(TieuChiMot) ? TieuChiMot.Trim() : string.Empty;
            form.GiaTriMot = !string.IsNullOrEmpty(GiaTriMot) ? GiaTriMot.Trim() : string.Empty;
            _chamCongServiceDelegate.BuildSearchNhanVien(form);
            if (form.ListNhanVienCoTrongBangChamCong.Count == 0 && form.PageIndex > 1)
            {
                form.PageIndex--;
                _chamCongServiceDelegate.BuildSearchNhanVien(form);
            }

            return View(form);
        }

        [HttpPost]
        public ActionResult ThemNhanVienVaoBangChamCong(NhanVienTrongBangChamCongForm formPosted)
        {
            _chamCongServiceDelegate.ThemNhanVienVaoBangChamCong(formPosted);
            _chamCongServiceDelegate.BuildSearchNhanVien(formPosted);

            return View("NhanVienTrongBangChamCong", formPosted);
        }

        [HttpGet]
        public ActionResult ThemNhanVienVaoBangChamCong(int id)
        {
            return RedirectToAction("NhanVienTrongBangChamCong", new { id });
        }

        [HttpPost]
        public ActionResult XoaNhanVienKhoiBangChamCong(NhanVienTrongBangChamCongForm formPosted)
        {
            _chamCongServiceDelegate.XoaNhanVienKhoiBangChamCong(formPosted);
            _chamCongServiceDelegate.BuildSearchNhanVien(formPosted);
            if (formPosted.ListNhanVienCoTrongBangChamCong.Count == 0 && formPosted.PageIndex > 1)
            {
                formPosted.PageIndex--;
                _chamCongServiceDelegate.BuildSearchNhanVien(formPosted);
            }

            return View("NhanVienTrongBangChamCong", formPosted);
        }

        [HttpGet]
        public ActionResult XoaNhanVienKhoiBangChamCong(int id)
        {
            return RedirectToAction("NhanVienTrongBangChamCong", new { id });
        }

        public ActionResult TongHopChamCong(int? id, int? thang, int? nam)
        {
            var form = new TongHopChamCongForm();
            form.ItemPerPage = 0;
            var dtToday = DateTime.Today;

            CC_BangChamCong objBangChamCong = null;

            #region Tổng hợp Chấm Công Cho Tháng Hiện Tại
            if (id == null && thang == null && nam == null)
            {
                //Tổng hợp Chấm Công Cho Tháng Hiện Tại
                objBangChamCong = _chamCongServiceDelegate.GetBangChamCongByThangNam(dtToday.Month, dtToday.Year);
                if (objBangChamCong == null)
                {
                    form.MessageError =
                        string.Format(
                            "Bảng Chấm Công tháng {0}/{1} chưa được tạo! Vui lòng <a href='/ChamCong/SuaBangChamCong' target='_blank'>Tạo Bảng Chấm Công</a>'!",
                            dtToday.Month.ToString("0#"), dtToday.Year);
                }
            }
            #endregion
            #region Tổng hợp Chấm Công Cho Tháng 'thang/nam'
            if (id == null && thang != null && nam != null)
            {
                //Tổng hợp Chấm Công Cho Tháng 'thang/nam'
                if (thang == dtToday.Month && nam == dtToday.Year)
                {
                    return Redirect("/ChamCong/TongHopChamCong");
                }
                objBangChamCong = _chamCongServiceDelegate.GetBangChamCongByThangNam(thang, nam);
                if (objBangChamCong == null)
                {
                    form.MessageError =
                        string.Format(
                            "Bảng Chấm Công tháng {0}/{1} chưa được tạo! Vui lòng <a href='/ChamCong/SuaBangChamCong' target='_blank'>Tạo Bảng Chấm Công</a>!",
                            thang.Value.ToString("0#"), nam.Value);
                }
            }
            #endregion
            #region Tổng hợp Chấm Công Bảng Chấm Công có Mã Bảng Chấm Công = 'id'
            if (id != null && thang == null && nam == null)
            {
                objBangChamCong = _chamCongServiceDelegate.GetBangChamCongByIdBangChamCong(id);
                if (objBangChamCong == null)
                {
                    form.MessageError =
                        string.Format(
                            "Dữ liệu Chấm Công không tồn tại! Vui lòng chọn Bảng Chấm Công Khác!");
                }
            }
            #endregion
            #region Tổng hợp Chấm Công Cho 'thang' Của Năm Hiện Tại
            if (id == null && thang != null && nam == null)
            {
                //Tổng hợp Chấm Công Cho 'thang' Của Năm Hiện Tại

                if (thang == dtToday.Month)
                {
                    return Redirect("/ChamCong/TongHopChamCong");
                }
                objBangChamCong = _chamCongServiceDelegate.GetBangChamCongByThangNam(thang, dtToday.Year);

                if (objBangChamCong == null)
                {
                    form.MessageError =
                        string.Format(
                            "Bảng Chấm Công tháng {0}/{1} chưa được tạo! Vui lòng <a href='/ChamCong/SuaBangChamCong' target='_blank'>Tạo Bảng Chấm Công</a>!",
                            thang.Value.ToString("0#"), dtToday.Year);
                }
            }
            #endregion

            if (objBangChamCong != null)
            {
                form.Id = objBangChamCong.ID;
                form.BangChamCong = _chamCongServiceDelegate.BuildBaseBangChamCong(objBangChamCong);
            }

            _chamCongServiceDelegate.BuildTongHopChamCongNgay(form);
            return View(form);
        }

        public JsonResult TinhTongHopVaLuuLaiDuLieuChamCongAjax(int id)
        {
            //Nghỉ 1/2s
            System.Threading.Thread.Sleep(200);
            CC_BangChamCong objBangChamCong = null;
            objBangChamCong = _chamCongServiceDelegate.GetBangChamCongByIdBangChamCong(id);
            if (objBangChamCong == null)
                return Json(new { IsSuccess = false, MessageError = "Bảng Chấm Công Không có thực!" }, JsonRequestBehavior.AllowGet);
            if (objBangChamCong.IsFinish == true)
                return Json(new { IsSuccess = false, MessageError = "Bảng Chấm Công này đã được Hoàn Thành! Không thể thực hiện Tổng Hợp Dữ Liệu!" }, JsonRequestBehavior.AllowGet);

            if (_chamCongServiceDelegate.TinhTongHopVaLuuLaiDuLieuChamCongByIdBangChamCong(id))
                return Json(new { IsSuccess = true, MessageError = "" }, JsonRequestBehavior.AllowGet);
            return Json(new { IsSuccess = false, MessageError = "Xảy ra lỗi trong quá trình thực hiện!" }, JsonRequestBehavior.AllowGet);
        }

        #endregion

        #region TAM.NN

        #region Index
        public ActionResult ThoiKhoaBieuChamCong(int? id, string NgayHienHanh)
        {
            ThoiKhoaBieuChamCongForm form = new ThoiKhoaBieuChamCongForm();
            form.DanhSachNhanVienPagedList = _ThoiKhoaBieuChamCongDelegate.GetAllNhanVienpagelist(id);
            _ThoiKhoaBieuChamCongDelegate.ConvertToFormCacThuTrongTuan(ref form, NgayHienHanh, id);//id chính là IdNumber
            form.PageNumber = id ?? 1;
            return View("~/Views/ChamCong/ThoiKhoaBieuChamCong.aspx", form);
        }
        #endregion

        #region Chấm Thưởng tiền bồi dưỡng chuyến xe và thưởng tiền đi km

        public ActionResult TienBoiDuong(int? id, int? ngay, int? thang, int? nam, int? pageIndex)
        {
            var form = new ChamCongHomNayForm();
            form.PageIndex = pageIndex > 1 ? pageIndex.Value : 1;
            var dtNow = DateTime.Now;

            CC_BangChamCong objBangChamCong = null;

            #region Chấm Công Cho Hôm Nay (Ngày Hiện Tại)
            if (id == null && ngay == null && thang == null && nam == null)
            {
                //Chấm Công Cho Hôm Nay (Ngày Hiện Tại)
                objBangChamCong = _chamCongServiceDelegate.GetBangChamCongByNgayChamCong(dtNow);
                if (objBangChamCong == null)
                {
                    form.MessageError =
                        string.Format(
                            "Bảng Chấm Công tháng {0}/{1} chưa được tạo! Vui lòng <a href='/ChamCong/SuaBangChamCong' target='_blank'>Tạo Bảng Chấm Công</a> nếu muốn Chấm Công cho ngày '{2} <i>({3} - Hôm nay)</i>'!",
                            dtNow.Month.ToString("0#"), dtNow.Year,
                            dtNow.ToString("dd/MM/yyyy"), _commonDelegate.GetDayOfWeek(dtNow));
                }
                else
                {
                    form.NgayChamCong = dtNow;
                    form.Ngay = dtNow.Day;
                    form.IsToday = true;
                    form.DayOfWeek = _commonDelegate.GetDayOfWeek(dtNow);
                }
            }
            #endregion
            #region Chấm Công Cho Ngày 'ngay/thang/nam'
            if (id == null && ngay != null && thang != null && nam != null)
            {
                //Chấm Công Cho Ngày 'ngay/thang/nam'
                if (!_commonDelegate.IsDateTime(ngay, thang, nam))
                {
                    form.MessageError =
                        string.Format(
                            "Không tồn tại ngày '{0}/{1}/{2}'! Vui lòng chọn ngày khác!",
                            Convert.ToString(ngay), Convert.ToString(thang), Convert.ToString(nam));
                }
                else
                {
                    form.NgayChamCong = _commonDelegate.ConvertToDateTime(ngay, thang, nam);
                    form.Ngay = form.NgayChamCong.Value.Day;
                    form.DayOfWeek = _commonDelegate.GetDayOfWeek(form.NgayChamCong);
                    if (_commonDelegate.DateTimeIsEqual(form.NgayChamCong, dtNow))
                    {
                        return Redirect("/ChamCong/TienBoiDuong");
                    }
                    objBangChamCong = _chamCongServiceDelegate.GetBangChamCongByNgayChamCong(form.NgayChamCong);
                    if (objBangChamCong == null)
                    {
                        form.MessageError =
                            string.Format(
                                "Bảng Chấm Công tháng {0}/{1} chưa được tạo! Vui lòng <a href='/ChamCong/SuaBangChamCong' target='_blank'>Tạo Bảng Chấm Công</a> nếu muốn Chấm Công cho ngày '{2} <i>({3})</i>'!",
                                form.NgayChamCong.Value.Month.ToString("0#"), form.NgayChamCong.Value.Year,
                                form.NgayChamCong.Value.ToString("dd/MM/yyyy"),
                                _commonDelegate.GetDayOfWeek(form.NgayChamCong));
                    }
                }
            }
            #endregion
            #region Chấm Công Cho Ngày 'ngay' Của Bảng Chấm Công có Mã Bảng Chấm Công = 'id'
            if (id != null && ngay != null && thang == null && nam == null)
            {
                //Chấm Công Cho Ngày 'ngay' Của Bảng Chấm Công có Mã Bảng Chấm Công = 'id'
                objBangChamCong = _chamCongServiceDelegate.GetBangChamCongByIdBangChamCong(id);
                if (objBangChamCong == null)
                {
                    form.MessageError =
                        "Dữ liệu Chấm Công Không Tồn Tại! Vui lòng chọn một ngày khác hay một bảng chấm công khác!";
                }
                else
                {
                    if (!_commonDelegate.IsDateTime(ngay, objBangChamCong.Thang, objBangChamCong.Nam))
                    {
                        form.MessageError =
                            string.Format(
                                "Không tồn tại ngày '{0}/{1}/{2}'! Vui lòng chọn ngày khác!",
                                Convert.ToString(ngay), Convert.ToString(objBangChamCong.Thang), Convert.ToString(objBangChamCong.Nam));
                    }
                    else
                    {
                        form.NgayChamCong = _commonDelegate.ConvertToDateTime(ngay, objBangChamCong.Thang,
                                                                              objBangChamCong.Nam);
                        form.Ngay = form.NgayChamCong.Value.Day;
                        form.DayOfWeek = _commonDelegate.GetDayOfWeek(form.NgayChamCong);
                        if (_commonDelegate.DateTimeIsEqual(form.NgayChamCong, dtNow))
                        {
                            return Redirect("/ChamCong/TienBoiDuong");
                        }
                    }
                }
            }
            #endregion
            #region Chấm Công Cho Ngày 'ngay' Của Bảng Chấm Công Tháng Hiện Tại
            if (id == null && ngay != null && thang == null && nam == null)
            {
                //Chấm Công Cho Ngày 'ngay' Của Bảng Chấm Công Tháng Hiện Tại

                if (ngay == dtNow.Day)
                {
                    return Redirect("/ChamCong/TienBoiDuong");
                }
                objBangChamCong = _chamCongServiceDelegate.GetBangChamCongByNgayChamCong(dtNow);
                if (!_commonDelegate.IsDateTime(ngay, dtNow.Month, dtNow.Year))
                {
                    form.MessageError =
                        string.Format(
                            "Không tồn tại ngày '{0}/{1}/{2}'! Vui lòng chọn ngày khác!",
                            Convert.ToString(ngay), Convert.ToString(dtNow.Month), Convert.ToString(dtNow.Year));
                }
                else
                {
                    form.NgayChamCong = _commonDelegate.ConvertToDateTime(ngay, dtNow.Month, dtNow.Year);
                    form.Ngay = form.NgayChamCong.Value.Day;
                    form.DayOfWeek = _commonDelegate.GetDayOfWeek(form.NgayChamCong);
                    if (objBangChamCong == null)
                    {
                        form.MessageError =
                            string.Format(
                                "Bảng Chấm Công tháng {0}/{1} chưa được tạo! Vui lòng <a href='/ChamCong/SuaBangChamCong' target='_blank'>Tạo Bảng Chấm Công</a> nếu muốn Chấm Công cho ngày '{2} <i>({3})</i>'!",
                                form.NgayChamCong.Value.Month.ToString("0#"), form.NgayChamCong.Value.Year,
                                form.NgayChamCong.Value.ToString("dd/MM/yyyy"),
                                form.DayOfWeek);
                    }
                }
            }
            #endregion
            #region Chấm Công Cho Ngày 1 Của Bảng Chấm Công có Mã Bảng Chấm Công = 'id'
            if (id != null && ngay == null && thang == null && nam == null)
            {
                //Chấm Công Cho Ngày 1 Của Bảng Chấm Công có Mã Bảng Chấm Công = 'id'
                objBangChamCong = _chamCongServiceDelegate.GetBangChamCongByIdBangChamCong(id);
                if (objBangChamCong != null)
                {
                    return RedirectToAction("TienBoiDuong", new { id, ngay = 1 });
                }
                form.MessageError =
                    "Dữ liệu Chấm Công Không Tồn Tại! Vui lòng chọn một ngày khác hay một bảng chấm công khác!";
            }
            #endregion

            if (objBangChamCong != null)
            {
                form.Id = objBangChamCong.ID;
                form.Thang = objBangChamCong.Thang;
                form.Nam = objBangChamCong.Nam;
                form.IsLock = objBangChamCong.IsLock;
                form.IsFinish = objBangChamCong.IsFinish;
                if (form.IsFinish)
                {
                    form.MessageError =
                        string.Format(
                            "Bảng Chấm Công tháng {0}/{1} đã hoàn thành! Không thể thao tác đối với dữ liệu Chấm Công của tháng '{2}/{3}'!",
                            form.NgayChamCong.Value.Month.ToString("0#"), dtNow.Year,
                            form.NgayChamCong.Value.Month.ToString("0#"), dtNow.Year);
                }
                if (form.IsLock)
                {
                    form.MessageError =
                        string.Format(
                            "Bảng Chấm Công tháng {0}/{1} đã bị khóa! Không thể thao tác đối với dữ liệu Chấm Công của tháng '{2}/{3}'! Hãy <a href='/ChamCong/SuaBangChamCong/{4}' target='_blank' title='Bảng chấm công tháng {5}/{6}'>mở khóa Bảng Chấm Công này</a> nếu muốn chấm công cho ngày {7}",
                            form.NgayChamCong.Value.Month.ToString("0#"), form.NgayChamCong.Value.Year,
                            form.NgayChamCong.Value.Month.ToString("0#"), form.NgayChamCong.Value.Year,
                            form.Id,
                            form.NgayChamCong.Value.Month.ToString("0#"), form.NgayChamCong.Value.Year,
                            form.NgayChamCong.Value.ToString("dd/MM/yyyy") + "<i>(" +
                            _commonDelegate.GetDayOfWeek(form.NgayChamCong) + ")</i>");
                }
                _chamCongServiceDelegate.BuildDanhSachNhanVienTrongCacChuyenHang(form);
            }
            form.ListKyHieuChamCong = _chamCongServiceDelegate.BuildListAllKyHieuChamCong();
            form.cbLoaiNhanVien = new SelectList(_chamCongServiceDelegate.GetAllJobtiles(), "ID", "JobTitle");
            form.cbLoaiXe = new SelectList(_LoaiXeDelegate.GetAllLoaiXe(), "Id", "LoaiXe");
            form.cbSoLuongTaiXeMotXe = new SelectList(_SoLuongTaiXeDelegate.GetAllSoLuongTaiXeMotXe(), "Id", "SoLuongTaiXe");
            return View(form);
        }

        public JsonResult BuilThuongKm()
        {
            string str = string.Empty;
            //str += "<table width=\"100%\" cellspacing=\"0\" cellpadding=\"0\" border=\"1\" class=\"table_home\">"+
            //    " <tbody><tr><td nowrap=\"nowrap\" align=\"center\"> <strong>STT</strong>"+
            //    "</td><td nowrap=\"nowrap\" align=\"center\"> <strong>Họ</strong> </td>"+
            //    " <td nowrap=\"nowrap\" align=\"center\"><strong>Tên</strong></td>"+
            //    "<td nowrap=\"nowrap\" align=\"center\"><strong>Thứ hai - 08/04/2013 </strong></td></tr>"+
            //    "<tr><td nowrap=\"nowrap\" align=\"center\">1</td>"+
            //    "<td nowrap=\"nowrap\" style=\"padding-left: 5px; text-align:left;\">Nguyễn Phương</td></tr></table>";
            IList<dm_SoKm> listSoKm = SoKmDelegate.GetAllSoKm();
            IList<dm_Buoi> listBuoi = BuoiDelegate.GetAllBuoi();
            int TongDongCuaSoKm = listSoKm.Count;
            int TongDongCuaBuoi = listBuoi.Count;
            str += "<table width=\"100%\" border='1' class=\"table_home\">";
            str += "<tr><td nowrap=\"nowrap\" align=\"center\" style=\"background:#6E6F70;color:#FFFFFF\"> <strong>&nbsp;</strong></td>";
            for (int i = 0; i < TongDongCuaBuoi; i++)
            {
                str += "<td nowrap=\"nowrap\" align=\"center\" style=\"background:#6E6F70;color:#FFFFFF\"> <strong>" + listBuoi[i].Name + "</strong></td>";
            }
            str += "</tr>";
            for (int j = 0; j < TongDongCuaSoKm; j++)
            {
                if (j % 2 == 0)
                    str += "<tr style=\"background:#F1F0ED;\"><td nowrap=\"nowrap\" style=\"padding-left: 5px;text-align:left;\"> <strong>" + listSoKm[j].Name + "</strong></td>";
                else
                    str += "<tr><td nowrap=\"nowrap\" style=\"padding-left: 5px;text-align:left\"> <strong>" + listSoKm[j].Name + "</strong></td>";
                for (int K = 0; K < TongDongCuaBuoi; K++)
                {
                    str += "<td nowrap=\"nowrap\" style=\"text-align:center\"><strong>";
                    decimal sotien = TienBoiDuongDelegate.GetSoTienBoiDuong(listBuoi[K].Id, listSoKm[j].Id);
                    if (sotien != 0)
                    {
                        str += sotien.ToString("#,#0").Replace(",", ".") + "<input type=\"text\" id=\"" + listSoKm[j].Id + "/" + listBuoi[K].Id + "\" name=\"sotienthuong\" onkeyup=\"keyupChiNhapSo(this);\" style=\"width:30px\"></strong></td>";
                    }
                    else
                        str += sotien.ToString("#,#0").Replace(",", ".") + "</strong></td>";
                }
                str += "</tr>";
            }
            str += "</table>";
            return Json(str, JsonRequestBehavior.AllowGet);

        }

        public ActionResult LuuTienBoiDuong(string GiaTri,int PhuXe,string LoaiXe,string SoLuongTaiXe, string IdNhanVien,int IdBangChamCong,string NgayLap)
        {
            int kq = _chamCongServiceDelegate.LuuCacSoTienTrongChuyenHang(GiaTri,PhuXe,LoaiXe,SoLuongTaiXe,IdNhanVien,IdBangChamCong,NgayLap);
            return Json(kq, JsonRequestBehavior.AllowGet);

        }

        public JsonResult UpdateTienBoiDuong(string GiaTri, int PhuXe, string LoaiXe, string SoLuongTaiXe, string IdNhanVien, int IdBangChamCong, string NgayLap)
        {
            int kq = _chamCongServiceDelegate.CapNhatCacSoTienTrongChuyenHang(GiaTri, PhuXe, LoaiXe, SoLuongTaiXe, IdNhanVien, IdBangChamCong, NgayLap);
            return Json(kq, JsonRequestBehavior.AllowGet);
        }

        public JsonResult EditThongTinTaiXeTrongNgay(int IdNhanVien,string NgayLap)
        {
            string str = string.Empty;
            //str += "<table width=\"100%\" cellspacing=\"0\" cellpadding=\"0\" border=\"1\" class=\"table_home\">"+
            //    " <tbody><tr><td nowrap=\"nowrap\" align=\"center\"> <strong>STT</strong>"+
            //    "</td><td nowrap=\"nowrap\" align=\"center\"> <strong>Họ</strong> </td>"+
            //    " <td nowrap=\"nowrap\" align=\"center\"><strong>Tên</strong></td>"+
            //    "<td nowrap=\"nowrap\" align=\"center\"><strong>Thứ hai - 08/04/2013 </strong></td></tr>"+
            //    "<tr><td nowrap=\"nowrap\" align=\"center\">1</td>"+
            //    "<td nowrap=\"nowrap\" style=\"padding-left: 5px; text-align:left;\">Nguyễn Phương</td></tr></table>";
            IList<dm_SoKm> listSoKm = SoKmDelegate.GetAllSoKm();
            IList<dm_Buoi> listBuoi = BuoiDelegate.GetAllBuoi();
            int TongDongCuaSoKm = listSoKm.Count;
            int TongDongCuaBuoi = listBuoi.Count;
            str += "<table width=\"100%\" border='1' class=\"table_home\">";
            str += "<tr><td nowrap=\"nowrap\" align=\"center\" style=\"background:#6E6F70;color:#FFFFFF\"> <strong>&nbsp;</strong></td>";
            for (int i = 0; i < TongDongCuaBuoi; i++)
            {
                str += "<td nowrap=\"nowrap\" align=\"center\" style=\"background:#6E6F70;color:#FFFFFF\"> <strong>" + listBuoi[i].Name + "</strong></td>";
            }
            str += "</tr>";
            for (int j = 0; j < TongDongCuaSoKm; j++)
            {
                if (j % 2 == 0)
                    str += "<tr style=\"background:#F1F0ED;\"><td nowrap=\"nowrap\" style=\"padding-left: 5px;text-align:left;\"> <strong>" + listSoKm[j].Name + "</strong></td>";
                else
                    str += "<tr><td nowrap=\"nowrap\" style=\"padding-left: 5px;text-align:left\"> <strong>" + listSoKm[j].Name + "</strong></td>";
                for (int K = 0; K < TongDongCuaBuoi; K++)
                {
                    str += "<td nowrap=\"nowrap\" style=\"text-align:center\"><strong>";
                    decimal sotien = TienBoiDuongDelegate.GetSoTienBoiDuong(listBuoi[K].Id, listSoKm[j].Id);
                    if (sotien != 0)
                    {
                        int solan = _chamCongServiceDelegate.GetSoChuyenDiTrongThuong(listSoKm[j].Id, listBuoi[K].Id, IdNhanVien, NgayLap);
                        if(solan >0)
                            str += sotien.ToString("#,#0").Replace(",", ".") + "<input type=\"text\" id=\"" + listSoKm[j].Id + "/" + listBuoi[K].Id + "\" value=\"" + solan + "\" name=\"sotienthuong\" onkeyup=\"keyupChiNhapSo(this);\" style=\"width:30px;background:#FDE99C\"></strong></td>";
                        else
                            str += sotien.ToString("#,#0").Replace(",", ".") + "<input type=\"text\" id=\"" + listSoKm[j].Id + "/" + listBuoi[K].Id + "\" value=\"" + solan + "\" name=\"sotienthuong\" onkeyup=\"keyupChiNhapSo(this);\" style=\"width:30px\"></strong></td>";
                    }
                    else
                        str += sotien.ToString("#,#0").Replace(",", ".") + "</strong></td>";
                }
                str += "</tr>";
            }
            str += "</table>";
            return Json(str, JsonRequestBehavior.AllowGet);
        }

        #endregion

        #endregion
    }
}
